duplexify
Turn a writeable and readable stream into a single streams2 duplex stream.
Similar to duplexer2 except it supports both streams2 and streams1 as input
and it allows you to set the readable and writable part asynchroniously using setReadable(stream)
and setWritable(stream)
npm install duplexify
Usage
Use duplexify(writable, readable, streamOptions)
(or duplexify.obj(writable, readable)
to create an object stream)
var duplexify = require('duplexify')
var dup = duplexify(writableStream, readableStream)
dup.write('hello world')
dup.on('data', function(data) {
})
You can also set the readable and writable parts asynchroniously
var dup = duplexify()
dup.write('hello world')
dup.setReadable(readableStream)
dup.setWritable(writableStream)
If you call setReadable
or setWritable
multiple times it will unregister the previous readable/writable stream.
To disable the readable or writable part call setReadable
or setWritable
with null
.
If the readable or writable streams emits an error or close it will destroy both streams and bubble up the event.
You can also explictly destroy the streams by calling dup.destroy()
dup.on('error', function(err) {
console.log('readable or writable emitted an error - close will follow')
})
dup.on('close', function() {
console.log('the duplex stream is destroyed')
})
dup.destroy()
HTTP request example
Turn a node core http request into a duplex stream is as easy as
var duplexify = require('duplexify')
var http = require('http')
var request = function(opts) {
var req = http.request(opts)
var dup = duplexify(req)
req.on('response', function(res) {
dup.setReadable(res)
})
return dup
}
var req = request({
method: 'GET',
host: 'www.google.com',
port: 80
})
req.end()
req.pipe(process.stdout)
License
MIT